// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	2/19/2014 4:21:56 PM				
// -----------------------------

#ifndef _DxEnum_h
#define _DxEnum_h

namespace DxLib
{

	enum class BufferType
	{
		None,
		Vertex,
		Index,
		Constant,
		Structured,
		StreamOutput,
	};

	enum class Usage
	{
		Default,
		Immutable,
		Dynamic,
		Staging,
	};

	enum class CPUAccess
	{
		None,
		Read,
		Write,
	};

	enum class Topology
	{
		PointList,
		LineList,
		LineStrip,
		TriangleList,
		TriangleStrip,
		Control1PointPatchList,
		Control2PointPatchList,
		Control3PointPatchList,
		Control4PointPatchList,
		Control5PointPatchList,
		Control6PointPatchList,
		Control7PointPatchList,
		Control8PointPatchList,
		Control9PointPatchList,
		Control10PointPatchList,
		Control11PointPatchList,
		Control12PointPatchList,
		Control13PointPatchList,
		Control14PointPatchList,
		Control15PointPatchList,
		Control16PointPatchList,
		Control17PointPatchList,
		Control18PointPatchList,
		Control19PointPatchList,
		Control20PointPatchList,
		Control21PointPatchList,
		Control22PointPatchList,
		Control23PointPatchList,
		Control24PointPatchList,
		Control25PointPatchList,
		Control26PointPatchList,
		Control27PointPatchList,
		Control28PointPatchList,
		Control29PointPatchList,
		Control30PointPatchList,
		Control31PointPatchList,
		Control32PointPatchList,
	};

	enum class ImageFileFormat
	{
		BMP,
		JPG,
		PNG,
		DDS,
		TIFF,
		GIF,
	};

	enum class CullMode
	{
		Front,
		Back,
		None,
	};

	enum class FrontMode
	{
		Clockwise,
		CounterClockwise,
	};

	enum class FillMode
	{
		Solid,
		Wireframe,
	};

	enum class CompareFunction
	{
		Equal,
		NotEqual,
		Less,
		Greater,
		LessEqual,
		GreaterEqual,
	};

	enum class Format
	{
		Unknown,
		Float,
		Float2,
		Float3,
		Float4,
		Int,
		Int2,
		Int3,
		Int4,
		UInt,
		UInt2,
		UInt3,
		UInt4,
		Depth16,
		Depth24Stencil8,
		Depth32,
		Byte,
		Byte2,
		Byte4,
		UByte,
		UByte2,
		UByte4,
	};

	enum class AddressMode
	{
		Wrap,
		Mirror,
		Clamp,
		Border,
		MirrorOnce,
	};

	enum class InputClass
	{
		PerVertex,
		PerInstance,
	};

	enum class BrushType
	{
		Solid,
	};

	// Not enum class since predefined values
	enum FontWeight
	{
		FW_Thin = 100,
		FW_ExtraLight = 200,
		FW_UltraLight = 200,
		FW_Light = 300,
		FW_SemiLight = 350,
		FW_Normal = 400,
		FW_Regular = 400,
		FW_Medium = 500,
		FW_DemiBold = 600,
		FW_SemiBold = 600,
		FW_Bold = 700,
		FW_ExtraBold = 800,
		FW_UltraBold = 800,
		FW_Black = 900,
		FW_Heavy = 900,
		FW_ExtraBlack = 950,
		FW_UltraBlack = 950
	};

	// Not enum class since predefined values
	enum FontStretch
	{
		FS_Undefined = 0,
		FS_UltraCondensed = 1,
		FS_ExtraCondensed = 2,
		FS_Condensed = 3,
		FS_SemiCondensed = 4,
		FS_Normal = 5,
		FS_Medium = 5,
		FS_SemiExpanded = 6,
		FS_Expanded = 7,
		FS_ExtraExpanded = 8,
		FS_UltraExpanded = 9
	};

	enum class FontStyle
	{
		Normal,
		Oblique,
		Italic,
	};

	enum class TextAlignment
	{
		Leading,
		Trailing,
		Center,
		Justified,
	};
}

#endif